#pragma once
#include <math.h>
#include <iostream>
#include <typeinfo>

class Vector3D
{
private:
	double x,y,z;
	double rotationMatrix[4];
	void print(std::ostream& out) const;

public:

	Vector3D(void);
	Vector3D(double vals[3]);
	Vector3D(const Vector3D& other);
	Vector3D& operator=(const Vector3D& other);
	Vector3D& operator+(const Vector3D& other);
	Vector3D& operator-(const Vector3D& other);
	Vector3D& operator*(const Vector3D& other);
	double operator[](int index);
	Vector3D& operator%(const Vector3D& other);
	operator double();
	friend std::ostream& operator<<(std::ostream& out, const Vector3D& v);
	double getX();
	double getY();
	double getZ();
	Vector3D matrixRotate(double vx, double vy, double vz, double theta);
	~Vector3D(void);

};